package aufgabe6;

import static org.junit.Assert.*;

import org.junit.Test;

public class Muesliefinder_Test {
	
	private final double MAX_INT = Double.MAX_VALUE;
	private final double abweichung = 0.00001;

	@Test
	public void test_MueslieSchale_1() {
		MueslieSchale mueslie_schale_1 = new MueslieSchale(24);
		MueslieSchale mueslie_schale_2 = new MueslieSchale(24);
		Mueslie mueslie_1 = new Mueslie(1, 1, 1);
		
		//Aenderungen abfragen
		assertEquals(0, mueslie_schale_1.getGefulltesVolume());
		assertEquals(MAX_INT, mueslie_schale_1.getVolumproPreis(), abweichung);
		//Mueslie Hinzufuegen
		mueslie_schale_1 = mueslie_schale_1.add_Mueslie(mueslie_1);
		//Aenderungen abfragen
		assertEquals(1, mueslie_schale_1.getGefulltesVolume());
		assertEquals(1.0, mueslie_schale_1.getVolumproPreis(), abweichung);
		//Mueslie Hinzufuegen
		mueslie_schale_1 = mueslie_schale_1.add_Mueslie(mueslie_1);
		//Aenderungen abfragen
		assertEquals(2, mueslie_schale_1.getGefulltesVolume());
		assertEquals(1.0, mueslie_schale_1.getVolumproPreis(), abweichung);
		//Mueslie Hinzufuegen
		mueslie_schale_1 = mueslie_schale_1.add_Mueslie(mueslie_1);
		//Aenderungen abfragen
		assertEquals(3, mueslie_schale_1.getGefulltesVolume());
		assertEquals(1.0, mueslie_schale_1.getVolumproPreis(), abweichung);
		
		//Aenderungen abfragen
		assertEquals(0, mueslie_schale_2.getGefulltesVolume());
		assertEquals(MAX_INT, mueslie_schale_2.getVolumproPreis(), abweichung);
	}	
		
	@Test
	public void test_MueslieSchale_2() {	
		MueslieSchale mueslie_schale_2 = new MueslieSchale(24);
		Mueslie mueslie_2 = new Mueslie(2, 1, 1);
		
		//Aenderungen abfragen
		assertEquals(0, mueslie_schale_2.getGefulltesVolume());
		assertEquals(MAX_INT, mueslie_schale_2.getVolumproPreis(), abweichung);
		//Mueslie Hinzufuegen
		mueslie_schale_2 = mueslie_schale_2.add_Mueslie(mueslie_2);
		//Aenderungen abfragen
		assertEquals(2, mueslie_schale_2.getGefulltesVolume());
		assertEquals(2.0, mueslie_schale_2.getVolumproPreis(), abweichung);
		//Mueslie Hinzufuegen
		mueslie_schale_2 = mueslie_schale_2.add_Mueslie(mueslie_2);
		//Aenderungen abfragen
		assertEquals(4, mueslie_schale_2.getGefulltesVolume());
		assertEquals(2.0, mueslie_schale_2.getVolumproPreis(), abweichung);
		//Mueslie Hinzufuegen
		mueslie_schale_2 = mueslie_schale_2.add_Mueslie(mueslie_2);
		//Aenderungen abfragen
		assertEquals(6, mueslie_schale_2.getGefulltesVolume());
		assertEquals(2.0, mueslie_schale_2.getVolumproPreis(), abweichung);
	}
	
	@Test
	public void test_finde_das_mueslie_1() {
		MueslieSchale mueslie_schale = new MueslieSchale(10);
		MueslieBar mueslie_bar = new MueslieBar();
		
		mueslie_bar.addMueslie(10, 10);
		mueslie_bar.addMueslie(9, 9);
		mueslie_bar.addMueslie(8, 8);
		mueslie_bar.addMueslie(7, 7);
		mueslie_bar.addMueslie(6, 6);
		mueslie_bar.addMueslie(5, 5);
		mueslie_bar.addMueslie(4, 4);
		mueslie_bar.addMueslie(3, 3);
		mueslie_bar.addMueslie(2, 2);
		mueslie_bar.addMueslie(1, 1);
		
		mueslie_schale = aufgabe6.Mueslifinder.finde_bestes_mueslie(mueslie_schale, mueslie_bar);
		System.out.println("Volume: " + mueslie_schale.getVolum() + ", Gefuellt: " + mueslie_schale.getGefulltesVolume());
		System.out.println("Preis Leistung: " + mueslie_schale.getVolumproPreis());
	}

	@Test
	public void test_finde_das_mueslie_2() {
		MueslieSchale mueslie_schale = new MueslieSchale(40);
		MueslieBar mueslie_bar = new MueslieBar();
		
		mueslie_bar.addMueslie(10, 10);
		mueslie_bar.addMueslie(9, 9);
		mueslie_bar.addMueslie(8, 8);
		mueslie_bar.addMueslie(7, 7);
		mueslie_bar.addMueslie(6, 6);
		mueslie_bar.addMueslie(5, 5);
		mueslie_bar.addMueslie(4, 4);
		mueslie_bar.addMueslie(3, 3);
		mueslie_bar.addMueslie(2, 2);
		mueslie_bar.addMueslie(1, 1);
		
		mueslie_schale = aufgabe6.Mueslifinder.finde_bestes_mueslie(mueslie_schale, mueslie_bar);
		assertEquals(40, mueslie_schale.getGefulltesVolume());
	}
	
	@Test
	public void test_finde_das_mueslie_3() {
		MueslieSchale mueslie_schale = new MueslieSchale(30);
		MueslieBar mueslie_bar = new MueslieBar();
		
		mueslie_bar.addMueslie(9, 9);
		mueslie_bar.addMueslie(9, 9);
		mueslie_bar.addMueslie(9, 9);
		mueslie_bar.addMueslie(9, 9);

		mueslie_schale = aufgabe6.Mueslifinder.finde_bestes_mueslie(mueslie_schale, mueslie_bar);
		assertEquals(27, mueslie_schale.getGefulltesVolume());
	}
	
	@Test
	public void test_finde_das_mueslie_4() {
		MueslieSchale mueslie_schale = new MueslieSchale(30);
		MueslieBar mueslie_bar = new MueslieBar();
		
		mueslie_bar.addMueslie(10, 5);
		mueslie_bar.addMueslie(10, 10);
		mueslie_bar.addMueslie(10, 15);
		mueslie_bar.addMueslie(10, 20);
		mueslie_bar.addMueslie(10, 25);
		
		mueslie_schale = aufgabe6.Mueslifinder.finde_bestes_mueslie(mueslie_schale, mueslie_bar);
		assertEquals(30, mueslie_schale.getGefulltesVolume());
		assertEquals(1.0, mueslie_schale.getVolumproPreis(), abweichung);
	}
	
}
